package com.cms.jy.draft.service;

import com.cms.jy.draft.entity.*;
import com.cms.jy.draft.util.*;

import java.io.IOException;
import java.util.List;

/**
 * 草稿操作服务类
 * 提供创建草稿、添加元素、保存草稿等核心功能
 */
public class DraftOperationService {
    
    /**
     * 创建新草稿，基于模板创建新的草稿目录和配置文件
     * @param templatePath 模板路径
     * @param draftName 草稿名称
     * @return 草稿路径
     * @throws IOException IO异常
     */
    public String createDraftFromTemplate(String templatePath, String draftName) throws IOException {
        // 构造草稿路径
        String draftPath = System.getProperty("user.home") + "/Documents/Drafts/" + draftName;
        
        // 基于模板创建新草稿
        DraftCreator.createDraftFromTemplate(templatePath, draftPath);
        
        return draftPath;
    }
    
    /**
     * 添加元素到草稿，提供添加文字、视频、音频、特效、转场等元素的接口
     * @param draftContent 草稿内容
     * @param element 元素对象
     */
    public void addElementToDraft(DraftContent draftContent, Object element) {
        if (element instanceof Text) {
            ElementAdder.addTextToDraft(draftContent, (Text) element);
        } else if (element instanceof Video) {
            ElementAdder.addVideoToDraft(draftContent, (Video) element);
        } else if (element instanceof Audio) {
            ElementAdder.addAudioToDraft(draftContent, (Audio) element);
        } else if (element instanceof Effect) {
            ElementAdder.addEffectToDraft(draftContent, (Effect) element);
        } else if (element instanceof Transition) {
            ElementAdder.addTransitionToDraft(draftContent, (Transition) element);
        } else if (element instanceof VideoEffect) {
            ElementAdder.addVideoEffectToDraft(draftContent, (VideoEffect) element);
        }
    }
    
    /**
     * 保存草稿，将修改后的草稿配置写入文件系统
     * @param draftContent 草稿内容
     * @param metaInfo 草稿元信息
     * @param settings 草稿设置
     * @param agencyConfig 草稿代理配置
     * @param virtualStore 草稿虚拟存储配置
     * @param draftPath 草稿路径
     * @throws IOException IO异常
     */
    public void saveDraft(DraftContent draftContent, DraftMetaInfo metaInfo, DraftSettings settings, 
                         DraftAgencyConfig agencyConfig, DraftVirtualStore virtualStore, 
                         String draftPath) throws IOException {
        DraftSaver.saveCompleteDraft(draftContent, metaInfo, settings, agencyConfig, virtualStore, draftPath);
    }
    
    /**
     * 对比草稿与模板，分析草稿与原始模板的差异
     * @param draftPath 草稿路径
     * @param templatePath 模板路径
     * @return 差异信息
     */
    public String compareDraftWithTemplate(String draftPath, String templatePath) {
        // 这里可以实现具体的对比逻辑
        // 暂时返回简单的占位符信息
        return "草稿与模板的差异分析结果";
    }
    
    /**
     * 为元素添加入场和出场动画
     * @param element 元素对象
     * @param inAnimation 入场动画
     * @param outAnimation 出场动画
     */
    public void addElementWithAnimation(Object element, Animation inAnimation, Animation outAnimation) {
        if (element instanceof Text) {
            Text text = (Text) element;
            ElementAdder.addTextInAnimation(text, inAnimation);
            ElementAdder.addTextOutAnimation(text, outAnimation);
        } else if (element instanceof MaterialAnimation) {
            MaterialAnimation materialAnimation = (MaterialAnimation) element;
            ElementAdder.addAnimationToElement(materialAnimation, inAnimation);
            ElementAdder.addAnimationToElement(materialAnimation, outAnimation);
        }
    }
    
    /**
     * 获取草稿中的特效材料
     * @param draftContent 草稿内容
     * @return 特效材料列表
     */
    public List<Effect> getEffectMaterials(DraftContent draftContent) {
        if (draftContent.getMaterials() != null) {
            return draftContent.getMaterials().getEffects();
        }
        return new java.util.ArrayList<>();
    }
    
    /**
     * 获取草稿中的转场材料
     * @param draftContent 草稿内容
     * @return 转场材料列表
     */
    public List<Transition> getTransitionMaterials(DraftContent draftContent) {
        if (draftContent.getMaterials() != null) {
            return draftContent.getMaterials().getTransitions();
        }
        return new java.util.ArrayList<>();
    }
    
    /**
     * 获取草稿中的视频效果材料
     * @param draftContent 草稿内容
     * @return 视频效果材料列表
     */
    public List<VideoEffect> getVideoEffectMaterials(DraftContent draftContent) {
        if (draftContent.getMaterials() != null) {
            return draftContent.getMaterials().getVideo_effects();
        }
        return new java.util.ArrayList<>();
    }
}